#ifndef TOKENCOLORS_H
#define TOKENCOLORS_H
#include <type_traits>
#include <map>
#include <string>
enum class LogType
{
    Reset = 0,

    Bold,
    Unbold,

    FrontBlack,
    FrontRed,
    FrontGreen,
    FrontYellow,
    FrontBlue,
    FrontPurple,
    FrontCyan,
    FrontWhite,
    BackBlack,
    BackRed,
    BackGreen,
    BackYellow,
    BackBlue,
    BackPurple,
    BackCyan,
    BackWhite,

    LightFrontBlack,
    LightFrontRed,
    LightFrontGreen,
    LightFrontYellow,
    LightFrontBlue,
    LightFrontPurple,
    LightFrontCyan,
    LightFrontWhite,
    LightBackBlack,
    LightBackRed,
    LightBackGreen,
    LightBackYellow,
    LightBackBlue,
    LightBackPurple,
    LightBackCyan,
    LightBackWhite,

    TypeCount
};
static const char* logCommands[] = {
    "\033[0m",    "\033[1m",    "\033[2m",

    "\033[30m",   "\033[31m",   "\033[32m",   "\033[33m",   "\033[34m",   "\033[35m",   "\033[36m",   "\033[37m",
    "\033[40m",   "\033[41m",   "\033[42m",   "\033[43m",   "\033[44m",   "\033[45m",   "\033[46m",   "\033[47m",

    "\033[1;30m", "\033[1;31m", "\033[1;32m", "\033[1;33m", "\033[1;34m", "\033[1;35m", "\033[1;36m", "\033[1;37m",
    "\033[1;40m", "\033[1;41m", "\033[1;42m", "\033[1;43m", "\033[1;44m", "\033[1;45m", "\033[1;46m", "\033[1;47m",

};
template <typename EnumType, typename IntType = int> int enumToInt(EnumType enumValue)
{
    static_assert(std::is_enum<EnumType>::value, "EnumType must be enum");

    return static_cast<IntType>(enumValue);
}

extern const std::map<std::string, LogType> colorsMap;
const char* getColorString(LogType type);

#endif // TOKENCOLORS_H
